﻿
using Xacml.Core.Runtime.DataTypes;

namespace Xacml.Core.Runtime
{
  public sealed class DataTypeDescriptor
  {
    private static FunctionDataType _function = new FunctionDataType();
    private static AnyUri _anyUri = new AnyUri();
    private static Base64Binary _base64Binary = new Base64Binary();
    private static HexBinary _hexBinary = new HexBinary();
    private static BooleanDataType _boolean = new BooleanDataType();
    private static IntegerDataType _integer = new IntegerDataType();
    private static DateDataType _date = new DateDataType();
    private static DateTime _dateTime = new DateTime();
    private static DayTimeDuration _dayTimeDuration = new DayTimeDuration();
    private static YearMonthDuration _yearMonthDuration = new YearMonthDuration();
    private static DoubleDataType _double = new DoubleDataType();
    private static Rfc822Name _rfc822Name = new Rfc822Name();
    private static X500Name _x500Name = new X500Name();
    private static StringDataType _string = new StringDataType();
    private static Time _time = new Time();
    private static Bag _bag = new Bag();

    public static FunctionDataType Function
    {
      get
      {
        return DataTypeDescriptor._function;
      }
    }

    public static AnyUri AnyUri
    {
      get
      {
        return DataTypeDescriptor._anyUri;
      }
    }

    public static Base64Binary Base64Binary
    {
      get
      {
        return DataTypeDescriptor._base64Binary;
      }
    }

    public static HexBinary HexBinary
    {
      get
      {
        return DataTypeDescriptor._hexBinary;
      }
    }

    public static BooleanDataType Boolean
    {
      get
      {
        return DataTypeDescriptor._boolean;
      }
    }

    public static IntegerDataType Integer
    {
      get
      {
        return DataTypeDescriptor._integer;
      }
    }

    public static DateDataType Date
    {
      get
      {
        return DataTypeDescriptor._date;
      }
    }

    public static DateTime DateTime
    {
      get
      {
        return DataTypeDescriptor._dateTime;
      }
    }

    public static DayTimeDuration DayTimeDuration
    {
      get
      {
        return DataTypeDescriptor._dayTimeDuration;
      }
    }

    public static YearMonthDuration YearMonthDuration
    {
      get
      {
        return DataTypeDescriptor._yearMonthDuration;
      }
    }

    public static DoubleDataType Double
    {
      get
      {
        return DataTypeDescriptor._double;
      }
    }

    public static X500Name X500Name
    {
      get
      {
        return DataTypeDescriptor._x500Name;
      }
    }

    public static Rfc822Name Rfc822Name
    {
      get
      {
        return DataTypeDescriptor._rfc822Name;
      }
    }

    public static StringDataType String
    {
      get
      {
        return DataTypeDescriptor._string;
      }
    }

    public static Time Time
    {
      get
      {
        return DataTypeDescriptor._time;
      }
    }

    public static Bag Bag
    {
      get
      {
        return DataTypeDescriptor._bag;
      }
    }

    private DataTypeDescriptor()
    {
    }
  }
}
